class Transmission: def __init__(self, trame): self._id = None self._temperature = None self._humidite = None self._trame = trame if len(trame) == 40 and all(c in "01" for c in trame): self.decoder() def __repr__(self): return f"ID : {self._id} / Temp. : {self._temperature}°C / Hum. : {self._humidite}%" def decoder(self): self.decoder_id() self.decoder_temperature() self.decoder_humidite() def decoder_id(self): self._id = int(self._trame[0:8], 2) def decoder_temperature(self): valeur = int(self._trame[16:28], 2) self._temperature = (valeur - 900) / 10 def decoder_humidite(self): bloc = self._trame[28:36] if bloc == "10100000": self._humidite = 100 else: dizaine = int(bloc[0:4], 2) unite = int(bloc[4:8], 2) self._humidite = 10 * dizaine + unite def get_id(self): return self._id def get_temperature(self): return self._temperature def get_humidite(self): return self._humidite def est_valide(self): if len(self._trame) != 40: return False blocs = [ self._trame[0:8], self._trame[8:16], self._trame[16:28], self._trame[28:36] ] controle = self._trame[36:40] for i in range(4): nb_uns = blocs[i].count("1") bit_attendu = str(nb_uns % 2) if controle[i] != bit_attendu: return False return True